package com.tinyengine.it.common.utils;

import java.util.HashMap;
import java.util.Map;

public class DbDataTypeMap {

    private static final Map<String, String> TYPE_MAP = new HashMap<>();
    private static final Map<String, String> WRAPPER_MAP = new HashMap<>();


    static {
        // 基本类型映射
        TYPE_MAP.put("BOOLEAN", "Boolean");
        TYPE_MAP.put("TINYINT", "byte");
        TYPE_MAP.put("SMALLINT", "short");
        TYPE_MAP.put("MEDIUMINT", "Integer");
        TYPE_MAP.put("INT", "Integer");
        TYPE_MAP.put("FILE", "File");
        TYPE_MAP.put("INTEGER", "Integer");
        TYPE_MAP.put("BIGINT", "Long");
        TYPE_MAP.put("FLOAT", "Float");
        TYPE_MAP.put("DOUBLE", "Double");
        TYPE_MAP.put("DECIMAL", "BigDecimal");
        TYPE_MAP.put("CHAR", "String");
        TYPE_MAP.put("VARCHAR", "String");
        TYPE_MAP.put("TEXT", "String");
        TYPE_MAP.put("TINYTEXT", "String");
        TYPE_MAP.put("MEDIUMTEXT", "String");
        TYPE_MAP.put("LONGTEXT", "String");
        TYPE_MAP.put("DATE", "Date");
        TYPE_MAP.put("DATETIME", "LocalDateTime");
        TYPE_MAP.put("YEAR", "int");
        TYPE_MAP.put("BLOB", "byte[]");
        // 包装类映射
        WRAPPER_MAP.put("TINYINT", "java.lang.Byte");
        WRAPPER_MAP.put("SMALLINT", "java.lang.Short");
        WRAPPER_MAP.put("MEDIUMINT", "java.lang.Integer");
        WRAPPER_MAP.put("INT", "java.lang.Integer");
        WRAPPER_MAP.put("INTEGER", "java.lang.Integer");
        WRAPPER_MAP.put("BIGINT", "java.lang.Long");
        WRAPPER_MAP.put("FLOAT", "java.lang.Float");
        WRAPPER_MAP.put("DOUBLE", "java.lang.Double");
        WRAPPER_MAP.put("DECIMAL", "java.math.BigDecimal");
        WRAPPER_MAP.put("CHAR", "java.lang.String");
        WRAPPER_MAP.put("VARCHAR", "java.lang.String");
        WRAPPER_MAP.put("TEXT", "java.lang.String");
        WRAPPER_MAP.put("TINYTEXT", "java.lang.String");
        WRAPPER_MAP.put("MEDIUMTEXT", "java.lang.String");
        WRAPPER_MAP.put("LONGTEXT", "java.lang.String");
        WRAPPER_MAP.put("DATE", "java.util.Date");
        WRAPPER_MAP.put("DATETIME", "java.time.LocalDateTime");
        WRAPPER_MAP.put("YEAR", "java.lang.Integer");
        WRAPPER_MAP.put("FILE", "java.io.File");
    }

    public static String getJavaType(String mysqlType) {
        return TYPE_MAP.getOrDefault(mysqlType.toUpperCase(), "String");
    }

    public static String getWrapperType(String mysqlType) {
        return WRAPPER_MAP.getOrDefault(mysqlType.toUpperCase(), "java.lang.String");
    }

    //public static void main(String[] args) {
    //    System.out.println("INT -> " + getJavaType("INT")); // 输出 int
    //    System.out.println("INT -> " + getWrapperType("INT")); // 输出 java.lang.Integer
    //    System.out.println("VARCHAR -> " + getJavaType("VARCHAR")); // 输出 String
    //    System.out.println("BIGINT -> " + getWrapperType("BIGINT")); // 输出 java.lang.Long
    //}
}
